package data

import (
	"encoding/json"
	"land/config"
	"log"
	"net/http"
	"os"
	"path/filepath"
	"strconv"
)

func ShowHealthHandler(w http.ResponseWriter, r *http.Request) {

	config.AllowCors(w)

	// 解析表单数据
	if err := r.ParseMultipartForm(10 << 20); err != nil { // 设置最大上传文件大小为10MB
		http.Error(w, "无法解析表单", http.StatusBadRequest)
		log.Printf("解析表单数据时出错: %v", err)
		return
	}
	// log.Println("表单数据:", r.Form)

	useridStr := r.FormValue("id")
	report_name := r.FormValue("report_name")

	// 将userid字符串转换为整数
	userid, err := strconv.Atoi(useridStr)
	if err != nil {
		http.Error(w, "用户ID无效", http.StatusBadRequest)
		log.Printf("用户ID转换为整数时出错: %v", err)
		return
	}
	// log.Printf("用户ID: %d", userid)

	// 根据用户 ID 指定用户文件夹
	userFolder := filepath.Join("uploads", strconv.Itoa(userid))
	healthReportFolder := filepath.Join(userFolder, config.HealthReportFolderName)

	// 检查健康报告文件夹是否存在
	if _, err := os.Stat(healthReportFolder); os.IsNotExist(err) {
		http.Error(w, "健康报告文件夹未找到", http.StatusNotFound)
		log.Printf("健康报告文件夹未找到: %v", err)
		return
	}
	// log.Printf("健康报告文件夹路径: %s", healthReportFolder)

	// 构建健康报告的完整路径
	reportPath := filepath.Join(healthReportFolder, report_name)

	// 检查健康报告是否存在
	if _, err := os.Stat(reportPath); os.IsNotExist(err) {
		http.Error(w, "健康报告未找到", http.StatusNotFound)
		log.Printf("健康报告未找到: %v", err)
		return
	}

	// 构建返回的PDF文件URL
	pdfUrl := config.ServerIP + strconv.Itoa(userid) + "/" + config.HealthReportFolderName + "/" + report_name

	// 设置响应头并返回PDF URL
	w.Header().Set("Content-Type", "application/json")

	response := map[string]interface{}{
		"pdf_url": pdfUrl,
	}

	json.NewEncoder(w).Encode(response)

	// // 设置响应头，让客户端以附件形式下载文件
	// w.Header().Set("Content-Type", "application/pdf")                     // 可以根据文件类型修改此 MIME 类型
	// w.Header().Set("Content-Disposition", "inline; filename="+reportPath) // 使用 "inline" 而不是 "attachment"

	// // 返回健康报告 PDF 文件
	// http.ServeFile(w, r, reportPath)
	// log.Printf("健康报告路径: %s", reportPath)
}
